# include <stdio.h>
# include <stdlib.h>
# include "../spu/recu.h"
# include "../ubicus.h"
# include <spu_mfcio.h>
# define NB_MAX 1000



/**
* fonction permettant d'afficher un vecteur x donné en entrée
*/
void afficherVecteurFloat4(vector PRECISION x)
{
#ifdef ENFLOAT
	printf("%f, %f, %f, %f", spu_extract(x, 0), spu_extract(x, 1), spu_extract(x, 2), spu_extract(x, 3));
#else
	printf("%lf, %lf", spu_extract(x, 0), spu_extract(x, 1));
#endif
}

int main ()
{
	//declaration des variables de saisie
	PRECISION a, b, x, y;
	int nombreIteration, i;	
	
	//declaration des vecteurs utilisés
	
	printf("test recurrence \n");
	
	printf("\nveuillez saisir a: ");
#ifdef ENFLOAT
	scanf("%f", &a);
	printf("\nveuillez saisir b: ");
	scanf("%f", &b);
	printf("\nveuillez saisir x0:");
	scanf("%f", &x);
	printf("\nveuillez saisir y0:");
	scanf("%f", &y);
	printf("\nveuilez saisir le nombre d'iterations :");
	scanf("%i", &nombreIteration); 
	
	printf("test de la recurrence pour  a = %f , b = %f, x0 = %f et y0 = %f\n", a, b, x, y); 	
	printf("sur %i iterations\n",  nombreIteration);
#else 
	scanf("%lf", &a);
	printf("\nveuillez saisir b: ");
	scanf("%lf", &b);
	printf("\nveuillez saisir x0:");
	scanf("%lf", &x);
	printf("\nveuillez saisir y0:");
	scanf("%lf", &y);
	printf("\nveuilez saisir le nombre d'iterations :");
	scanf("%i", &nombreIteration); 
	
	printf("test de la recurrence pour  a = %lf , b = %lf, x0 = %lf et y0 = %lf\n", a, b, x, y); 	
	printf("sur %i iterations\n",  nombreIteration);
#endif
	
	//initialisation des vecteurs
#ifdef ENFLOAT
	vector PRECISION va = {a, a, a, a};
	vector PRECISION vb = {b, b, b, b};
	vector PRECISION vx0 = {x, x, x, x};
	vector PRECISION vy0 = {y, y, y, y};
	vector PRECISION vx[NB_MAX];
	vector PRECISION vy[NB_MAX];
#else
	vector PRECISION va = {a, a};
	vector PRECISION vb = {b, b};
	vector PRECISION vx0 = {x, x};
	vector PRECISION vy0 = {y, y};
	vector PRECISION vx[NB_MAX];
	vector PRECISION vy[NB_MAX];
#endif
	vx[0] = vx0;
	vy[0] = vy0;

	//traitement de la recurrence


	printf("Valeurs initiales :\n	x = ");
	afficherVecteurFloat4(vx[0]);
	printf("\n	y = ");
	afficherVecteurFloat4(vy[0]);
	printf("^\n");

	i = 0;
	while (i < nombreIteration)
	{
		vx[i+1] = vx[i];
		vy[i+1] = vy[i];
		recu(&vx[i+1], &vy[i+1], va, vb);
		
		
		printf("iteration %i : \n	x = ", i+1);
		afficherVecteurFloat4(vx[i+1]);
		printf("\n	y = ");
		afficherVecteurFloat4(vy[i+1]);
		printf("\n\n");
	
		i++;
	}

	printf("Valeurs initiales :\n	x = ");
	afficherVecteurFloat4(vx[0]);
	printf("\n	y = ");
	afficherVecteurFloat4(vy[0]);
	printf("\n");
	
	return(0);
}
